using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Matrix.Notification.Application.Contracts.Dto;
using Matrix.Notification.Notifications.Dto;
using Matrix.Notification.Domain.Shared.Notifications;

namespace Matrix.Notification.Notifications
{
    /// <summary>
    /// 通知应用服务接口
    /// </summary>
    public interface INotificationAppService : ICrudAppService<
        NotificationDto,
        Guid,
        PagedAndSortedResultRequestDto,
        CreateUpdateNotificationDto,
        CreateUpdateNotificationDto>
    {
        /// <summary>
        /// 标记通知为已读
        /// </summary>
        Task MarkAsReadAsync(Guid id);

        /// <summary>
        /// 批量标记通知为已读
        /// </summary>
        Task MarkMultipleAsReadAsync(List<Guid> ids);

        /// <summary>
        /// 标记所有通知为已读
        /// </summary>
        Task MarkAllAsReadAsync();

        /// <summary>
        /// 获取我的通知列表
        /// </summary>
        Task<PagedResultDto<NotificationDto>> GetMyNotificationsAsync(PagedAndSortedResultRequestDto input);

        /// <summary>
        /// 获取未读通知数量
        /// </summary>
        Task<int> GetUnreadCountAsync();

        /// <summary>
        /// 获取通知统计信息
        /// </summary>
        Task<NotificationStatisticsDto> GetStatisticsAsync(DateTimeRangeDto dateRange);

        
        /// <summary>
        /// 批量删除通知
        /// </summary>
        Task DeleteMultipleAsync(List<Guid> ids);
    }
}